package com.tmt.im.common.yunxin;

import java.io.Serial;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @Description TODO
 * @Author wuyi
 * @Date 2024/9/4 10:09
 * @Version 1.0
 **/
public class ErrorCode {

    private static final Map<Long, String> V9_ERROR_INFOS = new LinkedHashMap<>() {
        @Serial
        private static final long serialVersionUID = 3064361808746051560L;
        {
            put(403L, "云信接口——禁止操作");
            put(414L, "云信接口——参数错误: {0}");
            put(416L, "云信接口——调用频率超出限制");
            put(811L, "云信接口——放群消息时，最多可强推 100 个用户");
            put(806L, "云信接口——人数超过规定限制: 创建者加群数量超过限制（最大默认 5000）或者创建群时群成员数超出限制（最大默认 200）");
        }
    };

    private static final Map<Long, String> V10_ERROR_INFOS = new LinkedHashMap<>() {
        @Serial
        private static final long serialVersionUID = 3064361808746051560L;

        {
            put(403L, "云信接口——鉴权失败");
            put(414L, "云信接口——参数错误: {0}");
            put(416L, "云信接口——频率超限");

            put(500L, "云信接口——服务端内部错误");
            put(503L, "云信接口——服务器繁忙");

            put(102404L, "云信接口——用户不存在");
            put(108304L, "云信接口——未配置大容量超大群的数量");
            put(108305L, "云信接口——加入群组超过上限");

            put(108310L, "云信接口——当前操作者已是群主");
            put(108311L, "云信接口——超大群服务未开通");
            put(108434L, "云信接口——大容量超大群数量超限");
            put(108435L, "云信接口——创建群组超过上限");
            put(108437L, "云信接口——群人数超过上限");
            put(108449L, "云信接口——群组请求需要重试");
            put(108451L, "云信接口——群组信息未过反垃圾审核");

            put(108404L, "云信接口——群组不存在");
            put(108302L, "云信接口——非高级群");

            put(109305L, "云信接口——不允许操作管理员");
            put(109404L, "云信接口——群成员不存在");
            put(109427L, "云信接口——仅允许群主操作");
            put(109432L, "云信接口——仅允许群主或管理员操作");
            put(109451L, "云信接口——群成员反垃圾");

        }
    };

    public static String getErrorMessage(String version, Long errorCode) {
        if ("v9".equalsIgnoreCase(version)) {
            return V9_ERROR_INFOS.get(errorCode);
        }
        return V10_ERROR_INFOS.get(errorCode);
    }
}
